//会话层，只有一个tcp服务器-->进行基本的tcp管理
#include "TcpServer.hpp" 
//能够读到http字符串
#include "Http.hpp"


HttpResponse Login(HttpRequest &req)
{
  HttpResponse resp;
  std::cout << "外部已经拿到参数了：" << std::endl;
  //这里将打印我们获取到的Requestbody以及请求方法、和path
  req.GetRequestBody(); 
  std::cout << "#####################################" << std::endl;

  resp.AddCode(200, "OK");
  resp.AddBodyText("<html><h1>result done!!</h1></html>");


  // C++对于字符串的处理很麻烦
  //   username=helloworld&userpasswd=123456

  //   但是在未来，C++就不再去处理业务（处理数据了，通过一些方法：
  //   1. pipe
  //   2. dup2
  //   3. fork();
  //   把我们的参数交给
  //   4. exec* -> python, PHP, 甚至是Java！
  //   再由这些语言处理完这些参数后，在通过向标准输出打印，因为我们已经做过重定向了，最后HttpServer就获取到他们处理好的结果
  //   最后再给别人构建response返回

  return resp;
}

// ./tcpserver 8888
int main(int argc, char *argv[])
{
  if (argc != 2)
  {
    std::cerr << "Usage: " << argv[0] << " local-port" << std::endl;
    exit(0);
  }
  uint16_t port = std::stoi(argv[1]);

  HttpServer hserver;

  //让服务器支持登录功能： 服务名，方法函数
  hserver.InsertService("/login", Login);
  // hserver.InsertService("./register", Login);
  // hserver.InsertService("./search", Login);

  // //构建TCP服务器
  std::unique_ptr<TcpServer> tsvr = std::make_unique<TcpServer>(
    std::bind(&HttpServer::HandlerHttpRequest, 
      &hserver, std::placeholders::_1), 
      port);
  tsvr->Loop();

  return 0;
}

